Skip to content

Improve inbox, thread, nav, and settings UX - #12

Merged
wparad merged 3 commits into
mainfrom
claude/email-app-ui-improvements-sjuyiy
Aug 22, 2026
Merged

Improve inbox, thread, nav, and settings UX#12
wparad merged 3 commits into
mainfrom
claude/email-app-ui-improvements-sjuyiy

Conversation

@wparad

@wparad wparad commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Addresses a batch of UI/UX issues across the inbox, thread view, navigation drawer, and Settings, plus adds realtime updates.

  • Signals: MarkdownText now registers Markwon's HtmlPlugin, so HTML signal bodies render instead of showing raw tags; the collapsed one-line signal preview strips HTML to plain text.
  • Header gap: MainActivity now calls enableEdgeToEdge() explicitly. Without it, on API < 35 (edge-to-edge is auto-forced only on API 35+) the window wasn't edge-to-edge while TopAppBar's own status-bar inset padding assumed it was — reserving the status bar's height twice.
  • Archive/Delete: Archive now requires confirmation (Inbox swipe row, bulk selection, and Thread top bar). Delete moved into an overflow menu and also requires confirmation, including newly-wired bulk archive/delete in Inbox's selection mode.
  • Swipe gesture: the background action row now aligns its icons to the edge the swipe is actually revealing instead of always docking right. Positional threshold made explicit at 50%.
  • Inbox tabs: added Archived/All tabs (mirrors the web app's InboxTabBar), backed by a nullable-status paging path with per-status local cache clearing.
  • Hamburger menu: fixed the blank Accounts list (a LazyColumn nested in an unbounded Column renders nothing). Added a full Resources feature (API, repo, screen) that was entirely missing. Reordered the drawer with a profile row at the bottom. Added count badges for Inbox/Drafts/Quarantine/Resources.
  • Settings: Theme is now the first tab; Stats is its own tab; sub-tab lists get a visible scroll indicator; Aliases are editable; Email & Forwarding gained compose-behavior and retention controls. Theme preview tiles now show their base color swatch plus its hex value, so the difference between flavors reads as concrete rather than a subtle mood difference (the four Catppuccin flavors are intentionally a coordinated family, so at a glance the dark three can look similar — this makes the actual difference undeniable).
  • Labels: added a full edit dialog (name, color, icon, apply instructions) with delete moved inside it.
  • Realtime: added a WebSocket client mirroring the web app's SharedWorker (wss://<api>?token=&accountId=, 25s ping, backoff reconnect) that runs while the app is foregrounded — no FCM/push notification setup required. thread:updated events refresh the thread through the existing repository into Room, so every Flow-backed list and badge already listening to that store (which is how badges/lists work throughout this app — Room-backed, not page-local caches) picks up the change automatically.
  • Confirmations: swept the app for destructive actions without one — added to Clear logs and Remove forwarding address, on top of the archive/delete/bulk-action confirmations above.

Notes

  • Catppuccin theme defaulting to system light/dark and the four distinct flavor palettes were already correctly implemented in the existing code — verified, no changes needed there. The four flavors are a genuinely coordinated family (same accent-color relationships, differing mainly in background contrast), so the dark three can look similar at a glance — the new hex-labeled swatch makes the actual difference in values undeniable even where the vibe is similar.
  • Couldn't run a full Gradle/Android build in this environment (no Android SDK available), so changes are verified by careful manual review rather than a compiler — CI (Validate) is green on the latest commit.

Test plan

  • Build and run on a device/emulator
  • Verify signal HTML renders in an inbound email's expanded view
  • Verify no gap above the top app bar on an API < 35 device
  • Swipe an inbox row both directions; confirm icons appear at the correct edge and archive/delete show confirmations
  • Switch Inbox/Archived/All tabs and confirm counts and content are correct
  • Long-press to enter selection mode, select multiple threads, and bulk archive/delete with confirmation
  • Open the hamburger menu with 2+ accounts and confirm the Accounts list renders
  • Visit Resources from the drawer
  • Edit a label's apply instructions and confirm it persists
  • Change After-send action / retention duration in Settings and confirm they save
  • With two devices/sessions signed into the same account, confirm a change on one shows up live on the other without a manual refresh
  • Clear logs / remove a forwarding address and confirm each asks for confirmation first

Generated by Claude Code

claude added 3 commits August 22, 2026 09:41
- Render HTML in signal bodies (Markwon HtmlPlugin) instead of showing raw tags
- Fix blank area above the header via explicit edge-to-edge on API < 35
- Add confirmation dialogs for archive/delete; move delete into an overflow menu
- Fix swipe-to-reveal actions: align icons to the edge being revealed instead of
  always docking right, and make the reveal threshold explicit at 50%
- Add Archived/All tabs to Inbox (mirrors the web app's InboxTabBar), backed by
  a nullable-status paging path and per-status cache clearing
- Fix the hamburger menu: Accounts list was blank because it nested a
  LazyColumn in an unbounded Column; add Resources (new feature end-to-end);
  move Rules/Templates/Labels/Settings and add a profile row to the bottom
- Add nav drawer badges for Inbox/Drafts/Quarantine/Resources
- Settings: Theme is now the first tab, Stats is its own tab instead of a
  link that navigates away, sub-tab lists get a visible scroll indicator,
  Aliases are editable, Email & Forwarding gains compose-behavior (after-send
  action) and retention duration controls backed by the existing account
  PATCH endpoint
- Labels get an edit dialog (name/color/icon/apply instructions) with delete
  moved inside it instead of a standalone row action
drawRoundRect is a DrawScope member function, not a top-level import.
…s, and clearer theme previews

- Add a WebSocket client mirroring the web app's SharedWorker: connects to
  wss://<api>?token=&accountId=, pings every 25s, reconnects with backoff.
  Runs while the app is foregrounded — no FCM/push notification setup needed.
  thread:updated events refresh the thread through the existing repository
  into Room, so every Flow-backed list and badge already listening to that
  store picks up the change automatically.
- Wire up the previously-unused bulk archive/delete in Inbox selection mode
  with a selection action bar, both behind confirmation dialogs.
- Add confirmations to Clear logs and Remove forwarding address.
- Make the Settings theme preview tiles show their base color swatch plus its
  hex value, so the difference between flavors reads as concrete rather than
  a subtle mood difference.
@wparad
wparad merged commit 395ccb0 into main Aug 22, 2026
2 checks passed
@wparad
wparad deleted the claude/email-app-ui-improvements-sjuyiy branch August 22, 2026 11:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants